package com.wp.service;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/**
 * 通过注解实现环绕增强
 */
@Aspect
public class UserServiceLogger {
    private org.apache.log4j.Logger log = Logger.getLogger(UserServiceLogger.class);

    @Around("execution(* com.wp.service.UserService.*(..))")
    public Object UserServiceLogger(ProceedingJoinPoint jp) throws Throwable {
        log.info("调用" + jp.getTarget() + "的" + jp.getSignature().getName() + "方法。方法入参：" +
                Arrays.toString(jp.getArgs()));
        try {
            Object result = jp.proceed();  // 执行目标方法并获得其返回值
            log.info("调用" + jp.getTarget() + "的" + jp.getSignature().getName() + "方法。方法返回值：" + result);
            return result;
        } catch (Throwable e) {
            log.error(jp.getSignature().getName() + "方法发生异常" + e);
            throw e;
        } finally {
            log.info(jp.getSignature().getName() + "方法结束执行");
        }
    }
}




//    @Pointcut("execution(* com.wp.service.UserService.*(..))")
//    public void pointcut(){}
//    /**
//     * 前置增强
//     */
//    @Before("pointcut()")
//    public void before(JoinPoint jp) {
//        log.info("调用" + jp.getTarget() + "的" + jp.getSignature().getName() + "方法。方法入参：" +
//                Arrays.toString(jp.getArgs()));
//    }
//
//    /**
//     * 后置增强代码
//     */
//    @AfterReturning(pointcut="pointcut()",returning = "result")
//    public void afterReturning(JoinPoint jp, Object result) {
//        log.info("调用" + jp.getTarget() + "的" + jp.getSignature().getName() + "方法。方法返回值：" + result);
//    }
//
//
//    @After("execution(* com.wp.service.UserService.*(..))")
//    public void afterThrowing(JoinPoint jp) {
//        log.error(jp.getSignature().getName() + "方法结束执行");
//    }

